<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>vi 操作指南 | 小小错题本</title>
    <meta name="description" content="最近工作中总是与linux、git打交道，不可避免的要使用vim文本编辑器。在此，将一些常见的操作整理出来。做个总结。同时，通过网上查找再加强学习。

什么是vi？

&gt;vi(vim)可以说是linux中用得最多的工具了，不管你配置服务也好，写脚本也好，总会用到它。但是，vim作为一个“纯字符”模式下的工具，它的操作和WINDOWS中的文本编辑工具相比多少有些复杂。

基本概念

基本 ...">
    <meta name="generator" content="VuePress 1.3.0">
    
    
    <link rel="preload" href="/wrong_question_static_page/assets/css/0.styles.f30cb765.css" as="style"><link rel="preload" href="/wrong_question_static_page/assets/js/app.9022c753.js" as="script"><link rel="preload" href="/wrong_question_static_page/assets/js/4.8c1e4aa5.js" as="script"><link rel="preload" href="/wrong_question_static_page/assets/js/5.33f70f09.js" as="script"><link rel="preload" href="/wrong_question_static_page/assets/js/14.c44f0e4a.js" as="script"><link rel="prefetch" href="/wrong_question_static_page/assets/js/1.ec18c3a1.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/10.697d33d5.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/11.488795fa.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/12.12a9963e.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/13.9d026eb1.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/15.a258b8bb.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/16.92328039.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/17.c4f16e4e.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/18.4dfa396f.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/19.edba2346.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/20.082608a3.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/21.5ae0ad82.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/22.89457782.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/23.53bf9e28.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/24.ae06dfc6.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/25.1d7d04a4.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/6.af07a62f.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/7.2c342931.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/8.2545b8d2.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/9.0eaa1c27.js"><link rel="prefetch" href="/wrong_question_static_page/assets/js/vuejs-paginate.c4011005.js">
    <link rel="stylesheet" href="/wrong_question_static_page/assets/css/0.styles.f30cb765.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div id="vuepress-theme-blog__global-layout"><section id="header-wrapper"><header id="header"><div class="header-wrapper"><div class="title"><a href="/wrong_question_static_page/" class="nav-link home-link">小小错题本 </a></div> <div class="header-right-wrap"><ul class="nav"><li class="nav-item"><a href="/wrong_question_static_page/tag/" class="nav-link">分类</a></li></ul> <div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <!----></div></div></header></section> <div id="mobile-header"><div class="mobile-header-bar"><div class="mobile-header-title"><a href="/wrong_question_static_page/" class="nav-link mobile-home-link">小小错题本 </a> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-menu"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg></div> <div class="mobile-menu-wrapper"><hr class="menu-divider"> <ul class="mobile-nav"><li class="mobile-nav-item"><a href="/wrong_question_static_page/tag/" class="nav-link">分类</a></li> <li class="mobile-nav-item"><!----></li></ul></div></div></div> <div class="content-wrapper"><div id="vuepress-theme-blog__post-layout"><article itemscope="itemscope" itemtype="https://schema.org/BlogPosting" class="vuepress-blog-theme-content"><header><h1 itemprop="name headline" class="post-title">
        vi 操作指南
      </h1> <div class="post-meta"><!----> <div class="post-meta-date"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-clock"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> <time pubdate itemprop="datePublished" datetime="2018-08-21T21:00:38.000Z">
      Wed Aug 22 2018
    </time></div> <ul itemprop="keywords" class="post-meta-tags"><li class="post-tag" data-v-2ac33c20><a href="/wrong_question_static_page/tag/linux" data-v-2ac33c20> linux </a></li><li class="post-tag" data-v-2ac33c20><a href="/wrong_question_static_page/tag/shell" data-v-2ac33c20> shell </a></li><li class="post-tag" data-v-2ac33c20><a href="/wrong_question_static_page/tag/git" data-v-2ac33c20> git </a></li></ul></div></header> <div itemprop="articleBody" class="content__default"><p>最近工作中总是与linux、git打交道，不可避免的要使用vim文本编辑器。在此，将一些常见的操作整理出来。做个总结。同时，通过网上查找再加强学习。</p> <h2 id="什么是vi？"><a href="#什么是vi？" class="header-anchor">#</a> 什么是vi？</h2> <blockquote><p>vi(vim)可以说是linux中用得最多的工具了，不管你配置服务也好，写脚本也好，总会用到它。但是，vim作为一个“纯字符”模式下的工具，它的操作和WINDOWS中的文本编辑工具相比多少有些复杂。</p></blockquote> <h2 id="基本概念"><a href="#基本概念" class="header-anchor">#</a> 基本概念</h2> <p>基本上vi可分为三种操作状态，分别是命令模式（Command mode）、插入模式（Insert mode）和底线命令模式（Last line mode），各模式的功能区分如下：</p> <ol><li><p>Comand mode：控制屏幕光标的移动，字符或光标的删除，移动复制某区段及进入Insert mode下，或者到Last line mode。</p></li> <li><p>Insert mode：唯有在Insert mode下，才可做文字数据输入，按Esc等可回到Comand mode。</p></li> <li><p>Last line mode：将储存文件或离开编辑器，也可设置编辑环境，如寻找字符串、列出行号等。</p></li></ol> <p><em><strong>不过可以把vi简化成两个模式，即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。</strong></em></p> <h2 id="基本操作"><a href="#基本操作" class="header-anchor">#</a> 基本操作</h2> <ul><li><p>进入vi编辑模式：</p> <div class="language-bash extra-class"><pre class="language-bash"><code><span class="token function">vi</span> text.sh  <span class="token comment">#在系统提示符号输入vi及文件名称后，即可进入vi全屏幕编辑画面</span>
</code></pre></div></li> <li><p>编辑文件</p> <p><em><strong>进入vi之后是处于“Command mode”下，您要切换到Insert mode才能输入文字。</strong></em></p> <blockquote><p>在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode。这时候您就可以开始输入文字了。</p></blockquote> <ul><li><p>i : 插入，从目前光标所在之处插入所输入的文字。</p></li> <li><p>a : 增加，目前光标所在的下一个字开始输入文字。</p></li> <li><p>o : 插入新的一行，从行首开始输入文字。</p></li></ul></li> <li><p>Insert的切换→Command mode，按Esc键(退出编辑状态)：</p> <div class="language- extra-class"><pre><code>  您目前处于Insert mode，您就只能一直打字。假如您发现打错字了，想用光标键往回移动，将该字删除，就要按ESC键转换回Command mode，再删除文字。
</code></pre></div></li> <li><p>多行注释/反注释</p> <p>1.多行注释：</p> <ul><li>Ctrl+v           进入块级编辑模式</li> <li>操作光标上下      选取被注释区域</li> <li>输入I {大写的i}   进入多行插入修改模式</li> <li>输入#             输入要插入的字符</li> <li>按ESC            退出多行插入模式</li></ul> <p>2.取消注释</p> <ul><li>Ctrl+v           进入块级编辑模式</li> <li>操作光标上下      选取被注释区域</li> <li>按d删除第一列#号</li> <li>按ESC            退出多行插入模式</li></ul></li> <li><p>离开vi及存文件
在Command mode下，可按冒号“：”键入入Last line mode，例如：</p> <ul><li><p>:w filename (输入“w filename”，将文章存入指定的文件名filename)</p></li> <li><p>:wq (输入“wq”，因为进入之时已经指定文件名testfile，所以会写入testfile并离开vi)</p></li> <li><p>:q! (输入“q!”，强制离开并放弃编辑的文件)</p></li></ul></li></ul> <h2 id="command-mode功能键列表"><a href="#command-mode功能键列表" class="header-anchor">#</a> Command mode功能键列表</h2> <ol><li><p>移动光标</p> <ul><li>第一种方法：上下左右按键【好像白说了~~】</li> <li>第二种方法：vi标准按键：
<blockquote><p>h、j、k、l，分别控制光标左、下、上、右移一格。</p></blockquote></li></ul></li> <li><p>翻页</p> <ul><li>按Ctrl+B：屏幕往后移动一页。[常用]</li> <li>按Ctrl+F：屏幕往前移动一页。[常用]</li> <li>按Ctrl+U：屏幕往后移动半页。</li> <li>按Ctrl+D：屏幕往前移动半页。</li> <li>按 0 （数字零）：移动文章的开头。[常用]</li> <li>按 G：移动到文章的最后。[常用]</li> <li>按 w：光标跳到下个word的开头。[常用]</li> <li>按 e：光标跳到下个word的字尾。</li> <li>按 b：光标回到上个word的开头。</li> <li>按 $：移到光标所在行的行尾。[常用]</li> <li>按 ^：移到该行第一个非空白的字符。</li> <li>按 0：移到该行的开头位置。[常用]</li> <li>按 #：移到该行的第#个位置，例：51、121。[常用]</li></ul></li> <li><p>删除文字</p> <ul><li>x：每按一次删除光标所在位置的后面一个字符。[超常用]</li> <li>dd：删除光标所在行。[超常用]</li> <li>yy：复制光标所在行。[超常用]</li> <li>p：复制单行到您想粘贴之处。（指令‘yy’与‘p’必须搭配使用）</li></ul></li> <li><p>撤销操作</p> <ul><li>u：假如您误操作一个指令，可以马上按u，回复到上一个操作。[超常用]</li></ul></li> <li><p>跳至指定行</p> <ul><li>Ctrl+G：列出光标所在行的行号。例如，15G，表示移动光标至文章的第15行行首。[常用]</li></ul></li></ol> <h2 id="last-line-mode下指令简介"><a href="#last-line-mode下指令简介" class="header-anchor">#</a> Last line mode下指令简介</h2> <p><em><strong>先按Esc键确定您已经处于Command mode下后，再按冒号“：”或“/”或“？”三键的其中一键进入Last line mode。</strong></em></p> <ol><li>列出行号</li></ol> <ul><li>set nu: 输入“set nu”后，会在文章的每一行前面列出行号。</li></ul> <ol start="2"><li>跳到文章的某一行</li></ol> <ul><li>#：井号代表一个数字，在Last line mode提示符号“：”前输入数字，再按Enter就会跳到该行了，如：15[Enter]就会跳到文章的第15行。[常用]</li></ul> <ol start="3"><li>寻找字符串</li></ol> <ul><li>/关键字：先按/，再输入您想寻找的字，如果第一次找的关键字不是您相尽可能的，可以一直按n会往下寻找到您要的关键字为止。</li> <li>？关键字：先按？，再输入您想寻找的字，如果第一次找的关键字不是您想要的，可以按n会往前寻找到您要的关键字为止。</li></ul> <ol start="4"><li>取代字符串</li></ol> <ul><li>1，$s/string/replae/g：在last line mode输入“ 1,$s/string/replace/g ”会将全文的string字符串取代为replace字符串，其中1,$s就是指搜寻区间为文章从头至尾的意思，g则是表示全部取代不必确认。</li> <li>%s/string/replace/c：同样会将全文的string字符串取代为replace字符串，和上面指令不同的地方是，%s和1,$s是相同的功能，c则是表示要替代之前必须再次确认是否取代。</li> <li>1,20s/string/replace/g：将1至20行间的string替代为relpace字符串。</li></ul> <ol start="5"><li>存文件</li></ol> <ul><li>w：在last line mode提示符号“：”前按w即可将文件存起来。[超常用]</li></ul> <ol start="6"><li>离开</li></ol> <ul><li>q：按q就离开，有时如果无法离开vi，可搭配“！：强置离开vi，如“q！”</li> <li>qw：一般建议离开时，搭配w一起使用，如此离开时还可存文件。[常用]</li></ul></div> <footer><!----> <hr> <!----></footer></article> <div class="sticker vuepress-toc"><div class="vuepress-toc-item vuepress-toc-h2 active"><a href="#什么是vi？" title="什么是vi？">什么是vi？</a></div><div class="vuepress-toc-item vuepress-toc-h2"><a href="#基本概念" title="基本概念">基本概念</a></div><div class="vuepress-toc-item vuepress-toc-h2"><a href="#基本操作" title="基本操作">基本操作</a></div><div class="vuepress-toc-item vuepress-toc-h2"><a href="#command-mode功能键列表" title="Command mode功能键列表">Command mode功能键列表</a></div><div class="vuepress-toc-item vuepress-toc-h2"><a href="#last-line-mode下指令简介" title="Last line mode下指令简介">Last line mode下指令简介</a></div></div></div></div> <footer class="footer" data-v-06e1b74b><div class="footer-left-wrap" data-v-06e1b74b><ul class="contact" data-v-06e1b74b></ul></div> <div class="footer-right-wrap" data-v-06e1b74b><ul class="copyright" data-v-06e1b74b></ul></div></footer></div><div class="global-ui"><!----></div></div>
    <script src="/wrong_question_static_page/assets/js/app.9022c753.js" defer></script><script src="/wrong_question_static_page/assets/js/4.8c1e4aa5.js" defer></script><script src="/wrong_question_static_page/assets/js/5.33f70f09.js" defer></script><script src="/wrong_question_static_page/assets/js/14.c44f0e4a.js" defer></script>
  </body>
</html>
